package com.bird.thread.base.stopthread.volatiledemo;

/**
 * @author: bird
 * @Data: 2021/6/28 17:11
 * @description: 注意: Thread.interrupted()方法的目标对象是“当前线程”，而不管本方法来自于哪个对象
 * interrupt() interrupted() isInterrupted() 三者的区别。
 */
public class RightWayInterrupted {


    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                for (; ; ) {
                }
            }
        });

        // 启动thread这个线程
        thread.start();
        System.out.println(thread.isInterrupted());
        //将thread这个线程设置为中断标记。
        thread.interrupt();
        //获取thread线程中断的标记,这个不会清除thread的线程中断的状态.
        System.out.println("获取thread线程中断的标记：" + thread.isInterrupted());


        // 获取中断标志 并重置 获取当前运行的线程(就是这个方法的线程)的中断标志,如果调用这个方法的话 那么就会清除掉线程的中断标志 并返回清除掉的结果。
        // true-线程中断标记 false-线程未中断标记
        System.out.println(Thread.interrupted());
        // 获取中断标志 并重置  interrupted()  判断当前这个线程的
        Thread currentThread = Thread.currentThread();
        System.out.println("before-线程的名字: " + currentThread.getName() + " 线程的中断状态：" + currentThread.isInterrupted());
        //System.out.println("two: " + two);
        currentThread.interrupt();
        System.out.println("middle-线程的名字: " + currentThread.getName() + " 线程的中断状态：" + currentThread.isInterrupted());
        Thread.interrupted();// 判断当前运行的线程(就是这个方法的线程/main)的中断状态。调用这个方法会将线程的状态重置掉。 true-线程中断 false-线程未中断。
        System.out.println("after-线程的名字: " + currentThread.getName() + " 线程的中断状态：" + currentThread.isInterrupted());

        // 获取thread线程的中断标志。  调用这个方法不会清除掉中断标志
        System.out.println(thread.isInterrupted());
        thread.join();
        System.out.println("main thread is over!");
    }


    public static void test() throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                for (; ; ) {
                }
            }
        });

        // 启动thread这个线程
        thread.start();
        System.out.println(thread.isInterrupted());
        // 将thread这个线程设置为中断标记 通知这个线程中终止,结果是true;  true-代表终止 false-不终止。
        thread.interrupt();
        //获取中断标志
        System.out.println("获取thread线程中断的标记：" + thread.isInterrupted()); //  这个不会清除当前线程运行的状态.

        // 获取中断标志 并重置  interrupted()  判断当前这个线程的
        long id = Thread.currentThread().getId();
        System.out.println("Thread-Id= " + id + "线程状态：" + Thread.interrupted());
        System.out.println("Thread-Id= " + id + "线程状态：" + Thread.interrupted());

        System.out.println("isInterrupted: " + thread.interrupted());// false
        // 获取中断标志 并重置
        System.out.println(Thread.interrupted());// 这个是main函数的线程  false

        // 获取中断标志
        System.out.println(thread.isInterrupted());//false
        thread.join();
        System.out.println("main thread is over!");
    }
}
